package com.aust.reflect;

import java.lang.reflect.Method;

/**
 * 在反射中，通过 getDeclaredXXX() 可以获取任意成员（包括 private）
 * 但是如果你想对这些成员 进行访问/调用/修改，那么必须加上 setAccessible(true)
 * 否则 JVM 会抛出 IllegalAccessException 异常。
 */
public class Reflect6 {
    public static void main(String[] args) throws Exception {
        Class<Student> studentClass = Student.class;
        /**
         * 获取所有 public 方法
         */
        Method[] methods1 = studentClass.getMethods();
        for (Method method : methods1) {
            System.out.println(method);
        }
        System.out.println("=======================");

        /**
         * 获取类中定义的所有方法（不含继承）
         */
        Method[] methods2 = studentClass.getDeclaredMethods();
        for (Method method : methods2) {
            System.out.println(method);
        }
        System.out.println("=======================");

        /**
         * 获取 public 方法（包括继承的）
         */
        Method method1 = studentClass.getMethod("setName", String.class);
        System.out.println(method1);
        System.out.println("=======================");

        /**
         * 获取类中定义的所有方法（包括 private）
         */
        Method method2 = studentClass.getDeclaredMethod("setAge", int.class);
        System.out.println(method2);
    }
}
